# 此语句规定了运行该 CMake 脚本所需的最低 CMake 版本为 3.16。要是使用的 CMake 版本低于 3.16，就会报错。
cmake_minimum_required(VERSION 3.16)
# 定义项目名称为 tYaml，并且表明项目使用 C 和 C++ 语言
# set(LIBNAME tYaml)：把变量 LIBNAME 的值设定为 tYaml。
set(LIBNAME pg-config-diff)
project(${LIBNAME} C CXX)
# message 函数用于在 CMake 配置期间输出信息。
message(">>> CMAKE_CURRENT_SOURCE_DIR" = ${CMAKE_CURRENT_SOURCE_DIR})
message(">>> CMAKE_TOOLCHAIN_FILE" = ${CMAKE_TOOLCHAIN_FILE})
message(">>> PROJECT_BINARY_DIR" = ${PROJECT_BINARY_DIR})
message(">>> PROJECT_SOURCE_DIR" = ${PROJECT_SOURCE_DIR})
# CMAKE_C_FLAGS_DEBUG 和 CMAKE_CXX_FLAGS_DEBUG 分别是 C 和 C++ 在调试模式下的编译选项。
SET(CMAKE_C_FLAGS_DEBUG  "${CMAKE_C_FLAGS_DEBUG} -g ")
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g ")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g ")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
#add_definitions(-std=c++11)
# include_directories 函数用于指定编译器查找头文件的目录
include_directories(
    ./src
    ./include
    ./include/yaml-cpp
)
# set 函数将变量 SOURCES 的值设置为 src/main.cpp
set(SOURCES
    src/config.cpp
    src/db_conninfo.cpp
)
# link_directories 函数用于指定链接器查找库文件的目录。这里指定了 lib 目录。
link_directories(
    lib
    lib/opengauss
    lib/securec
)
# add_executable 函数用于创建一个可执行文件
add_executable(${LIBNAME}  ${SOURCES})
# 定义链接库列表
    # set(LIBRARIES pthread 
    # yaml-cpp
    # )
        
# 引用第三方yaml-cpp库(离线下载)
include(FetchContent)

FetchContent_Declare(
    yaml-cpp 
#    GIT_REPOSITORY https://github.com/jbeder/yaml-cpp.git 
#    GIT_TAG 0.8.0 
    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rd-party/yaml-cpp
)
FetchContent_MakeAvailable(yaml-cpp)

# FetchContent_Declare(
#     ssh2 
# #    GIT_REPOSITORY https://github.com/jbeder/yaml-cpp.git 
# #    GIT_TAG 0.8.0 
#     SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rd-party/libssh2-1.11.1
# )
# FetchContent_MakeAvailable(ssh2)

FetchContent_Declare(
    spdlog 
#    GIT_REPOSITORY https://github.com/jbeder/yaml-cpp.git 
#    GIT_TAG 0.8.0 
    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rd-party/spdlog-1.x
)
FetchContent_MakeAvailable(spdlog)

target_link_libraries(${LIBNAME} PUBLIC yaml-cpp)
target_link_libraries(${LIBNAME} PUBLIC pq)
file(COPY src/config.yaml DESTINATION ${PROJECT_BINARY_DIR})

#target_link_libraries(${LIBNAME} PUBLIC ssh2)
# target_link_libraries(${LIBNAME} PRIVATE spdlog::spdlog)

# target_link_libraries 函数把 LIBRARIES 变量指定的库（pthread 和 yaml-cpp）链接到 LIBNAME 变量指定的可执行文件（tYaml）上。
# target_link_libraries(${LIBNAME}   ${LIBRARIES})

INSTALL(FILES ${PROJECT_SOURCE_DIR}/src/config.yaml DESTINATION bin)
INSTALL(PROGRAMS ${PROJECT_BINARY_DIR}/pg-config-diff DESTINATION bin)
